﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Threading;

namespace Securfid
{
    class Program
    {
        static void Main(string[] args)
        {
            //Emplacement du lecteur création du nom de la device dans Biztalk Manager
            string local = "2-48-228";
            string devicename = String.Format("FX7400_{0}", local);

            //Réinitialise le reader en cas où il ait été fermé au mauvais moment
            ReaderRFID.ReInit(devicename);

            //Boucle du programme principal
            while (true)
            {
                //Récupération des configs inscrites dans la base de données
                Configs config;
                List<string> email;
                SqlCommands.ConfigtoMemoire("configs", out config, out email);

                //Enregistre l'heure de la lecture
                DateTime heureactuelle = DateTime.Now;

                ////////////Liste des tâches\\\\\\\\\\\\

                //Fait une lecture avec le reader
                List<Lectures> TagMEM = ReaderRFID.LectureReader(devicename, local, heureactuelle);

                //Applique les MAJ d'heure des lectures dans la base de données
                SqlCommands.ChangeDerniereVu(TagMEM, heureactuelle.ToString());

                //Va chercher les tags de la BD 
                List<Lectures> TagSQL = SqlCommands.TagSQLtoMemoire("rfid");

                //Va chercher la liste des appareils
                List<Appareils> ListeAppareils = SqlCommands.SQLtoAppareils("appareils");

                //Vérifie s'ils sont en alarme
                List<Lectures> alarmes = Lectures.Alarme(TagSQL, config.Gettemps_alarme(), heureactuelle);

                //Met alarme dans BD
                TagSQL = SqlCommands.MAJAlarme(alarmes, TagSQL, heureactuelle.ToString(), email, local, config, ListeAppareils);

                //Enleve alarme dans BD
                SqlCommands.EnleveAlarme(alarmes, TagSQL, heureactuelle.ToString(), devicename);
                
                //Active ou eteint l'alarme auditive si au moins un tag est en alarme
                Lectures.ActiveAlarme(TagSQL, devicename, config.GetStop_alarme());

                //Pause en attente de la prochaine exécution paramétré en sec dans la DB
                Console.WriteLine("Dernière exécution de la boucle : {0}", heureactuelle);
                Console.WriteLine();
                Thread.Sleep(config.Gettemps_lectures()*1000);
            }
        }
    }
}